// ==========================================================================
// gin-sns自动生成控制器相关代码，只生成一次，按需修改,再次生成不会覆盖.
// date：2021-02-21 13:45:54 +0800 CST
// path: app/controller/module/comment_api.go
// author：jon
// ==========================================================================
package module

import (
	"gin-sns/app/controller/api/render"
	"gin-sns/app/ginframe/response"
	"gin-sns/app/ginframe/tools"
	"gin-sns/app/model"
	commentModel "gin-sns/app/model/module/comment"
	"gin-sns/app/service/module"

	"github.com/gin-gonic/gin"
	//"gin-sns/app/ginframe/utils/gconv"
)

var CommentApi = newCommentApi()

func newCommentApi() *commentApi {
	return &commentApi{}
}

type commentApi struct {
}

//列表分页数据
func (c *commentApi) ListAjax(ctx *gin.Context) {
	req := new(commentModel.SelectPageReq)
	//获取参数
	if err := ctx.ShouldBind(req); err != nil {
		response.ErrorResp(ctx).SetMsg(err.Error()).Log("comment管理", req).WriteJsonExit()
		return
	}
	rows := make([]commentModel.Entity, 0)
	result, page, err := module.CommentService.SelectListByPage(req)

	if err == nil && len(result) > 0 {
		rows = result
	}

	response.BuildTable(ctx, page.Total, rows).WriteJsonExit()
}

//新增页面保存
func (c *commentApi) AddSave(ctx *gin.Context) {
	req := new(commentModel.AddReq)
	//获取参数
	if err := ctx.ShouldBind(req); err != nil {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Add).SetMsg(err.Error()).Log("评论新增数据", req).WriteJsonExit()
		return
	}

	id, err := module.CommentService.AddSave(req, ctx)

	if err != nil || id <= 0 {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Add).Log("评论新增数据", req).WriteJsonExit()
		return
	}
	response.SucessResp(ctx).SetData(id).Log("评论新增数据", req).WriteJsonExit()
}

//修改页面保存
func (c *commentApi) EditSave(ctx *gin.Context) {
	req := new(commentModel.EditReq)
	//获取参数
	if err := ctx.ShouldBind(req); err != nil {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Edit).SetMsg(err.Error()).Log("评论修改数据", req).WriteJsonExit()
		return
	}

	rs, err := module.CommentService.EditSave(req, ctx)

	if err != nil || rs <= 0 {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Edit).Log("评论修改数据", req).WriteJsonExit()
		return
	}
	response.SucessResp(ctx).SetBtype(model.Buniss_Edit).Log("评论修改数据", req).WriteJsonExit()
}

//删除数据
func (c *commentApi) Remove(ctx *gin.Context) {
	req := new(model.RemoveReq)
	//获取参数
	if err := ctx.ShouldBind(req); err != nil {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Del).SetMsg(err.Error()).Log("评论删除数据", req).WriteJsonExit()
		return
	}

	rs := module.CommentService.DeleteRecordByIds(req.Ids)

	if rs > 0 {
		response.SucessResp(ctx).SetBtype(model.Buniss_Del).Log("评论删除数据", req).WriteJsonExit()
	} else {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Del).Log("评论删除数据", req).WriteJsonExit()
	}
}

func (c *commentApi) GetList(ctx *gin.Context) {

	entityType := ctx.GetInt("entityType")
	entityId := ctx.GetInt64("entityId")
	pageNum := ctx.GetInt("pageNum")
	pageSize := ctx.GetInt("pageSize")

	req := new(commentModel.SelectPageReq)

	req.EntityId = entityId
	req.EntityType = entityType
	req.PageNum = pageNum
	req.PageSize = pageSize

	rows := make([]commentModel.Entity, 0)
	result, page, err := module.CommentService.SelectListByPage(req)

	if err == nil && len(result) > 0 {
		rows = result
	}

	response.BuildTable(ctx, page.Total, rows).WriteJsonExit()

	return
}

func (c *commentApi) PostCreate(ctx *gin.Context) {
	user := module.UsertokenService.GetCurrent(ctx)
	if user == nil {
		response.ErrorResp(ctx).SetMsg(tools.ErrorNotLogin.Error()).WriteJsonExit()
		return
	}

	req := new(commentModel.CreateCommentReq)
	//获取参数
	if err := ctx.ShouldBind(req); err != nil {
		response.ErrorResp(ctx).SetBtype(model.Buniss_Add).SetMsg(err.Error()).Log("评论新增数据", req).WriteJsonExit()
		return
	}

	comment, err := module.CommentService.Publish(user.Id, req)
	if err != nil {
		response.ErrorResp(ctx).SetMsg(err.Error()).WriteJsonExit()
		return
	}

	response.SucessResp(ctx).SetData(render.BuildComment(*comment)).WriteJsonExit()
	return
}
